package Sokoban;


import java.awt.Image;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Iterator;

/**
    Klasa TileMap zawiera dane mapy korzystąjcej z kafelków
    i zawierającej duszki. Każdy kafelek jest odwołaniem do obiektu
    Image. Oczywiście obiekty Image są wykorzystywane wielokrotnie.
*/
public class TileMap {

    private Image[][] tiles;
    private MovingImage player;
    private MovingImage wall;
    private ArrayList walls;
    private MovingImage boulder;
    private ArrayList boulders;
    private MovingImage area;
    private ArrayList areas;
    
    //private LinkedList balls;

    /**
        Tworzenie nowego obiektu TileMap o określonej szerokości
        i wysokości (wyrażonej liczbą kafelków) mapy.
    */
    public TileMap(int width, int height) {
        tiles = new Image[width][height];
        walls = new ArrayList();
        boulders = new ArrayList();
        areas = new ArrayList();
     
    }

    /**
        Zwraca szerokość bieżącego obiektu TileMap (ilość kafelków w poziomie).
    */
    public int getWidth() {
        return tiles.length;
    }

    /**
        Zwraca wysokość bieżącego obiektu TileMap (ilość kafelków w pionie).
    */
    public int getHeight() {
        return tiles[0].length;
    }

    /**
        Zwraca kafelek o określonych współrzędnych. Zwraca null jeżeli
        w tych współrzędnych nie ma kafelka lub współrzędne są poza zakresem.
    */
    public Image getTile(int x, int y) {
        if (x < 0 || x >= getWidth() ||
            y < 0 || y >= getHeight())
        {
            return null;
        }
        else {
            return tiles[x][y];
        }
    }

    /**
        Ustawia kafelek na określonych współrzędnych
    */
    public void setTile(int x, int y, Image tile) {
        tiles[x][y] = tile;
    }
    
    /*public void setWall(MovingImage wall) {
        this.wall = wall;
    }
    
    public Image getWallImage() {
        return wall.getMovingImage();
     }*/
    
    public ArrayList getWalls() {
        return walls;
     }
    
    public ArrayList getBoulders() {
        return boulders;
     }
    
    public ArrayList getAreas(){
    	return areas;
    }
    
    public Image getBoulderImage() {
        return boulder.getMovingImage();
     }
    
    public void setBoulder(MovingImage boulder) {
        this.boulder = boulder;
    }
    
    public void setPlayer(MovingImage player) {
        this.player = player;
    }
    
    public Image getPlayerImage() {
       return player.getMovingImage();
    }
    
    public MovingImage getPlayer() {
        return player;
     }
}